package com.jt.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.jt.pojo.User;
import com.jt.service.DubboUserService;
import com.jt.vo.SysResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import redis.clients.jedis.JedisCluster;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Controller
@RequestMapping("/user")
public class UserController {
    //消费者在启动时检查是否有服务提供者 false不检查 程序调用的时候才校验
    @Reference(check = false)
    private DubboUserService userService;
    @Autowired
    private JedisCluster jedisCluster;


    @RequestMapping("/{moduleName}")
    public String moduleName(@PathVariable String moduleName){
        return moduleName;
    }

    /**
     * 完成用户数据入库的操作
     * url   http://
     */
    @RequestMapping("doRegister")
    @ResponseBody
    public SysResult doRegister(User user){
        //service 第三方接口. 直接rpc调用访问jt-sso中的实现类
        userService.saveUser(user);
        return  SysResult.success();
    }
    @RequestMapping("doLogin")
    @ResponseBody
    public SysResult doLogin(User user, HttpServletResponse response){

        String ticket = userService.doLogin(user);
        if(StringUtils.isEmpty(ticket)){
            //如果为空说明用户名或密码有问题
            return SysResult.fail();
        }
        //创建Cookie对象
        Cookie cookie = new Cookie("JT_TICKET",ticket);
        //设定Cookie存活时间  value=-1代表当用户关闭会话时Cookie删除 value=0时  表示立即删除Cookie
        //value>0时表示设定Cookie的超时时间
        cookie.setMaxAge(7*24*60*60);
        //要求在jt.com的域名中实现数据的共享
        cookie.setDomain("jt.com");
        cookie.setPath("/");  //一般情况下都是/  根目录下的都可以访问这个cookie
        //将cookie存储到浏览器中
        response.addCookie(cookie);
        return  SysResult.success();
    }
    /**
     * 实现用户的退出功能
     * 重定向到系统首页
     * 删除redis 删除cookie
     */
    private static final String TICKET = "JT_TICKET";
    @RequestMapping("logout")
    public String logout(HttpServletRequest request,HttpServletResponse response){
        String jtTicket =null;
        //如何获取cookie中的数据
        Cookie[] cookies = request.getCookies();
        //校验cookie是否为null
        if(cookies !=null && cookies.length>0){
            for (Cookie cookie:cookies) {
                if(TICKET.equalsIgnoreCase(cookie.getName())){
                    jtTicket = cookie.getValue();
                    //业务需要删除cookie
                    cookie.setMaxAge(0);
                    cookie.setPath("/");
                    cookie.setDomain("jt.com");
                    response.addCookie(cookie);
                    break;
                }
            }
        }
        //校验数据是否有效
        if(!StringUtils.isEmpty(jtTicket)){
            //如果数据不为空 就开始删除
            jedisCluster.del(jtTicket);//根据key删除redis中的记录
            //删除cookie
        }
        return "redirect:/";
    }
}
